package com.erp.erp_servers.business.imp;

import com.erp.erp_dao.business.IExportContractProductDao;
import com.erp.erp_entitys.business.entity.ExportContractProductEntity;
import com.erp.erp_entitys.business.req.RemainingQuantityReq;
import com.erp.erp_entitys.business.rsp.ImportExportContractProductRsp;
import com.erp.erp_entitys.business.rsp.PurchaseInfoRsp;
import com.erp.erp_servers.business.IExportContractProductService;
import com.erp.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * @ClassName : ExportContractProductServiceImp
 * @Description : 外销产品接口实现类
 * @Author : lst
 * @Date: 2021-01-17 11:00
 */
@Service
public class ExportContractProductServiceImp implements IExportContractProductService {

    /**
     * 注入外销产品mapper
     */
    private final IExportContractProductDao exportContractProductDao;

    @Autowired
    public ExportContractProductServiceImp(IExportContractProductDao exportContractProductDao) {
        this.exportContractProductDao = exportContractProductDao;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public ExportContractProductEntity queryById(Integer id) {
        return exportContractProductDao.queryById(id);
    }

    /**
     * 通过实体作为筛选条件查询
     *
     * @param exportContractProduct 实例对象
     * @return 对象列表
     */
    @Override
    public List<ExportContractProductEntity> queryAll(ExportContractProductEntity exportContractProduct) {
        return exportContractProductDao.queryAll(exportContractProduct);
    }

    /**
     * 新增数据
     *
     * @param exportContractProduct 实例对象
     * @return 影响行数
     */
    @Override
    public int insert(ExportContractProductEntity exportContractProduct) {
        return exportContractProductDao.insert(exportContractProduct);
    }

    /**
     * 修改数据
     *
     * @param exportContractProduct 实例对象
     * @return 影响行数
     */
    @Override
    public int update(ExportContractProductEntity exportContractProduct) {
        return exportContractProductDao.update(exportContractProduct);
    }


    /**
     * 通过父ID查询数据
     * @param id 外销主表id
     * @return 外销产品信息
     */
    @Override
    public List<ImportExportContractProductRsp> queryByParentId(Integer id) {
        return exportContractProductDao.queryByParentId(id);
    }

    /**
     * 通过报价单号、产品编码、规格编码获取在外销产品中的报价产品数量
     * @param req 查询参数
     * @return 外销产品中的报价产品数量
     */
    @Override
    public List<ExportContractProductEntity> getOfferRemainingQuantity(RemainingQuantityReq req) {
        return exportContractProductDao.getOfferRemainingQuantity(req);
    }


    /**
     * 通过销售合同号、产品编码、规格编码获取在采购中的外销产品数量
     * @param req 查询参数
     * @return 采购中的外销产品信息
     */
    @Override
    public BigDecimal getPurchaseInfo(RemainingQuantityReq req) {
        List<PurchaseInfoRsp> list = exportContractProductDao.getPurchaseInfo(req);
        BigDecimal sum = new BigDecimal("0");
        for(PurchaseInfoRsp purchase : list){
            BigDecimal amount = new BigDecimal("0");
            if(StringUtil.isNotEmpty(purchase.getAmount())){
                amount = purchase.getAmount();
            }
            sum = sum.add(amount);
        }
        return sum;
    }

    /**
     * 通过采购单号获取已做计划数量
     * @param purchaseNo 采购单号
     * @return 已做计划数量
     */
    @Override
    public int getPlanCountByPurchaseNo(String purchaseNo) {
        return exportContractProductDao.getPlanCountByPurchaseNo(purchaseNo);
    }

    /**
     * 通过外销合同号获取已做采购数量
     * @param salesContractNo 外销合同号
     * @return 已做采购数量
     */
    @Override
    public int getUsedPurchaseInfoByConcatNo(String salesContractNo) {
        return exportContractProductDao.getUsedPurchaseInfoByConcatNo(salesContractNo);
    }

    /**
     * 通过外销合同号获取已做计划数量
     * @param salesContractNo 外销合同号
     * @return 获取已做计划数量
     */
    @Override
    public int getPlanCountByContractNo(String salesContractNo) {
        return exportContractProductDao.getPlanCountByContractNo(salesContractNo);
    }


}
